package com.ushine.web.template.test.client;

import com.ushine.web.template.test.constant.BorderConstant;
import com.ushine.web.template.test.constant.LengthConstant;
import com.ushine.web.template.test.utils.NumberTestUtils;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author: yls
 * @Date 2022/3/15 16:45
 * @Description: 数值型的客户端
 * @Version 1.0
 **/
@Component
public class NumberClient {

    @Resource
    private NumberTestUtils numberTestUtils;

    /**
     * 功能描述:
     * 〈 获取对应类型的随机数值 〉
     *
     * @param clazz 类型
     * @param minValue 最小值
     * @param maxValue 最大值
     * @return : java.util.Map<java.lang.String,java.lang.Number>
     * @author : yls
     * @date : 2022/3/15 16:48
     */
    public Map<String, Number> getNumberData(Class clazz, Integer minValue, Integer maxValue) {
        Map<String, Number> numberMap = new HashMap<String, Number>(10);
        int middleValue = (minValue + maxValue) / 2;
        // NULL对象
        numberMap.put( BorderConstant.NULL_VALUE, null);
        // 获取小于最小长度的值
        Number randomNumber = numberTestUtils.getNumberValue(clazz, minValue - 1);
        numberMap.put( BorderConstant.LESS_THAN_MIN_VALUE, randomNumber);
        // 获取最小长度的值
        randomNumber = numberTestUtils.getNumberValue(clazz, minValue );
        numberMap.put( BorderConstant.MIN_VALUE, randomNumber);
        // 生成中间值
        randomNumber = numberTestUtils.getNumberValue(clazz, middleValue );
        numberMap.put( BorderConstant.NORMAL_VALUE, randomNumber);
        // 获取最大值的值
        randomNumber = numberTestUtils.getNumberValue(clazz, maxValue );
        numberMap.put(  BorderConstant.MAX_VALUE, randomNumber);
        // 获取大于最大值的值
        randomNumber = numberTestUtils.getNumberValue(clazz, maxValue + 1);
        numberMap.put( BorderConstant.GREATER_THAN_MIN_VALUE, randomNumber);
        return numberMap;
    }

    /**
     * 功能描述:
     * 〈获取对应类型的随机数值〉
     *
     * @param minValue 最小值
     * @param clazz 类型
     * @return : java.util.Map<java.lang.String,java.lang.Number>
     * @author : yls
     * @date : 2022/3/15 17:00
     */
    public Map<String, Number> getNumberDataByMin(Class clazz, Integer minValue) {
        return getNumberData(clazz,minValue, LengthConstant.NUMBER_MAX_VALUE);
    }

    /**
     * 功能描述:
     * 〈获取对应类型的随机数值〉
     *
     * @param maxValue 最大值
     * @param clazz 类型
     * @return : java.util.Map<java.lang.String,java.lang.Number>
     * @author : yls
     * @date : 2022/3/15 17:00
     */
    public Map<String, Number> getNumberDataByMax(Class clazz, Integer maxValue) {
        return getNumberData(clazz, LengthConstant.NUMBER_MIN_VALUE,maxValue);
    }

    /**
     * 功能描述:
     * 〈获取对应类型的随机数值〉
     *
     * @param clazz 类型
     * @return : java.util.Map<java.lang.String,java.lang.Number>
     * @author : yls
     * @date : 2022/3/15 17:00
     */
    public Map<String, Number> getNumberData( Class clazz) {
        return getNumberData(clazz, LengthConstant.NUMBER_MIN_VALUE, LengthConstant.NUMBER_MAX_VALUE);
    }
}
